package com.tinchos.entidades;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

import com.tinchos.entidades.facultad.Materia;

public class Estudiante {
	
	private String nombre;
	private Carrera carrera;
	
	public Estudiante() {
		
	}
	
	public Estudiante(String nombre) {
		this.nombre = nombre;
	}
	
	public boolean tieneAprobada(Materia materia) {
		
		List aprobadas = this.carrera.getMateriasAprobadas();
		
		Iterator iterator = aprobadas.iterator();
		while (iterator.hasNext()) {
			
			MateriaAprobada mat = (MateriaAprobada) iterator.next();
			
			if (mat.getMateria().getCodigo() == materia.getCodigo())
			
				return true;
			
		}
		
		return false;
		
		
	}
	
	
	
	
	/*******************/
	/** Persistencia **/
	/*****************/
	/* Instancia a partir de NodoXML */
	public Estudiante(Element nodo) {
		
		this();
		this.nombre = nodo.getAttributeValue("nombre");
		this.carrera = new Carrera(nodo.getChild("carrera"));
		
	}
	
	/* NodoXML a partir de instancia */
	public void guardarEstudiante() {
		
		/* Creamos el elemento root */
		Element root = new Element("estudiante");
		
		root.setAttribute(new Attribute("nombre", this.nombre));
		root.addContent(this.carrera.obtenerNodo());
		
		/* Creamos el documento */
		Document doc = new Document(root);
		
		/* Lo almacenamos en un fichero dado por argumento */
		try {
			String nombreArchivo = "./Data/Estudiantes/" + this.nombre + ".xml";
			
			XMLOutputter salidaXml = new XMLOutputter(Format.getPrettyFormat());
			new File(nombreArchivo).createNewFile();
			FileOutputStream archivo = new FileOutputStream(nombreArchivo);
			salidaXml.output(doc, archivo);
			archivo.flush();
			archivo.close();
		} catch (Exception e) {
			System.out.println("ERROR terrible");
		}
		
	}
	
	
	/***********************/
	/** Fin Persistencia **/
	/*********************/
	
	public Carrera getCarrera() {
		return carrera;
	}
	
	public void setCarrera(Carrera carrera) {
		this.carrera = carrera;
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public static Estudiante cargarEstudiante(String nombre) {
		
		String archivoACargar = "./Data/Estudiantes/" + nombre + ".xml"; 
		SAXBuilder builder = new SAXBuilder();
		
		Document doc = null;
		Element root = null;
		
		try {
			doc = builder.build(new FileInputStream(archivoACargar));
		} catch (JDOMException e) {
			//TODO crear excepciones
			e.printStackTrace();
			System.out.println("Error1");
		} catch (IOException e) {
			//TODO crear excepciones
			e.printStackTrace();
			System.out.println("Error2");
		}
		if (doc == null) {
			System.out.println("null3!!"); 
			System.exit(1);
		}
		root = doc.getRootElement();
		return new Estudiante(root);
		
	}
	
}
